import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

public class SivuDao {

	public static Sivu getSivu(int id) {
		Sivu sivu = new Sivu();

		try {
			Class.forName("org.sqlite.JDBC");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		Connection conn;
		try {

			PreparedStatement prep;

			conn = DriverManager.getConnection("jdbc:sqlite:test.db");
			prep = conn.prepareStatement("select * from sivut where id = ?;");
			prep.setInt(1, id);

			ResultSet rs = prep.executeQuery();
			if (rs.next()) {
				sivu.setId(id);
				sivu.setOtsikko(rs.getString("otsikko"));
				sivu.setLinkkinimi(rs.getString("linkkinimi"));
				sivu.setTeksti(rs.getString("teksti"));
			}
			prep.close();
			conn.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return sivu;
	}

	public static Vector<Sivu> getOtsikot() {

		Vector<Sivu> sivut = new Vector<Sivu>();

		try {
			Class.forName("org.sqlite.JDBC");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		Connection conn;
		try {

			PreparedStatement prep;

			conn = DriverManager.getConnection("jdbc:sqlite:test.db");
			prep = conn.prepareStatement("select linkkinimi, id from sivut");

			ResultSet rs = prep.executeQuery();
			while (rs.next()) {
				Sivu sivu = new Sivu();
				sivu.setId(rs.getInt("id"));
				sivu.setLinkkinimi(rs.getString("linkkinimi"));
				sivut.add(sivu);
			}
			prep.close();
			conn.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return sivut;
	}

	public static int addSivu(Sivu sivu) {
		int id = 0;
		try {
			Class.forName("org.sqlite.JDBC");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		Connection conn;
		try {

			PreparedStatement prep;

			conn = DriverManager.getConnection("jdbc:sqlite:test.db");
			prep = conn
					.prepareStatement("insert into sivut (otsikko, linkkinimi, teksti) values (?, ?, ?);");
			prep.setString(1, sivu.getOtsikko());
			prep.setString(2, sivu.getLinkkinimi());
			prep.setString(3, sivu.getTeksti());
			prep.executeUpdate();

			ResultSet rs = prep.getGeneratedKeys();
			rs.next();
			id = rs.getInt(1);
			prep.close();
			conn.close();
			prep.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return id;
	}

	public static int updateSivu(Sivu sivu) {
		int id = 0;
		try {
			Class.forName("org.sqlite.JDBC");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		Connection conn;
		try {

			PreparedStatement prep;

			conn = DriverManager.getConnection("jdbc:sqlite:test.db");
			prep = conn
					.prepareStatement("update sivut set otsikko=?, linkkinimi=?, teksti=? where id=?;");

			prep.setString(1, sivu.getOtsikko());
			prep.setString(2, sivu.getLinkkinimi());
			prep.setString(3, sivu.getTeksti());
			prep.setInt(4, sivu.getId());
			prep.executeUpdate();

			ResultSet rs = prep.getGeneratedKeys();
			rs.next();
			id = rs.getInt(1);
			prep.close();
			conn.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return id;
	}

	public static void alustaKanta() {
		try {
			Class.forName("org.sqlite.JDBC");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		Connection conn;
		try {
			conn = DriverManager.getConnection("jdbc:sqlite:test.db");
			Statement stat = conn.createStatement();
			stat.executeUpdate("drop table if exists sivut;");
			stat.executeUpdate("create table sivut (id INTEGER PRIMARY KEY ASC, otsikko, linkkinimi, teksti);");
			stat.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		SivuDao.alustaKanta();
		Sivu sivu = new Sivu();
		for (int i = 0; i <= 5; i++) {
			sivu.setOtsikko("Otsikko sivulle" + i);
			sivu.setLinkkinimi("Linkin nimi" + i);
			sivu.setTeksti("<p>Teksti " + i + "</p>");
			SivuDao.addSivu(sivu);
		}

		Sivu haettuSivu = SivuDao.getSivu(1);
		System.out.println(haettuSivu.getOtsikko());
		System.out.println(haettuSivu.getLinkkinimi());
		System.out.println(haettuSivu.getTeksti());
	}

}
